package com.csi.dao;

import com.csi.domain.*;
import com.csi.pojo.PageBean;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;

public interface UserDao {

    // 用户登陆
    User login(String loginAccount,String loginPassword) throws SQLException;

    // 根据账号查找盐值
    String findSalt(String loginAccount) throws SQLException;

    // 查找全部用户(角色，权限)
    List<User> findAll() throws SQLException;

    // 查找用户分页
    PageBean<User> findPage(int currentPageNumber) throws SQLException;

    // 根据id查找对应用户（角色）
    User findById(int userId) throws SQLException;

    // 更新用户的状态
    void updateStatus(int status,int userId) throws SQLException;

    // 修改用户密码
    User updatePassword(int userId,String password) throws SQLException;

    // 修改用户信息
    void updateInfo(User user) throws SQLException;

    // 根据id查找盐值
    String findSalt(int userId) throws SQLException;

    // 根据账号查询用户信息
    User findByLoginAccount(String loginAccount) throws SQLException;

    // 用户入职
    void entry(Integer userId, Employee employee, List<Integer> roles) throws SQLException;

    // 查找用户的最后一位的用户编号
    String findLast() throws SQLException;

    // 头像上传
    void uploadPath(String imageAddress, int userId) throws SQLException;

    // 查询用户绑定的指定银行卡信息
    BindAccount queryBindAccount(String userNumber, String accountNumber) throws SQLException;

    // 查询用户的具体客户信息和账户信息
    HashMap<String,Object> queryInfo(String userNumber, String accountNumber) throws SQLException;

    // 查询钱包余额
    double queryBalance(String userNumber) throws SQLException;

    // 查询用户支付限额
    double queryPayLimit(String userNumber) throws SQLException;

    // 查询用户所有关联银行卡列表（储蓄卡和活期账户）
    List<AccountDetails> queryAccountList(String userNumber) throws SQLException;

    // 查询用户所有关联银行卡列表（信用卡）
    List<AccountCredDetails> queryCredAccountList(String userNumber) throws SQLException;

    // 查询用户已绑定卡的列表
    List<BindAccount> queryBindAccountList(String userNumber) throws SQLException;

    // 钱包转账
    void transferByWallet(String userNumber,String targetUserNumber,double transferAmount) throws SQLException;

    // 查询用户支付密码
    String queryPayPassword(String userNumber) throws SQLException;

    // 修改用户支付密码
    void updatePayPassword(String userNumber,String password) throws SQLException;

    // 修改支付限额
    void updatePayLimit(String userNumber,Double payLimit) throws SQLException;

    // 通过钱包支付
    void payByWallet(String userNumber,String targetUserNumber,double amount) throws SQLException;

    // 通过银行账户支付（储蓄卡、活期账户）操作
    void payByAccount(String accountNumber,String targetUserNumber,double amount) throws SQLException;

    // 通过银行账户支付（信用卡）操作
    void payByCredAccount(String accountNumber, String targetUserNumber, double amount) throws SQLException;

    // 查找指定的用户信用卡
    AccountCredDetails queryAccountCredDetails(String userNumber, String accountNumber) throws SQLException;

    // 查询用户账户（储蓄卡、活期账户）可用余额
    double queryAvailableBalance(String userNumber) throws SQLException;

    // 查询用户账户（信用卡）账户金额
    double queryAvailableLimit(String userNumber) throws SQLException;

    // 用户绑卡
    void bindCard(String userNumber, String accountNumber,String accountType) throws SQLException;

    // 用户解绑卡
    void unbindCard(String userNumber, String accountNumber) throws SQLException;

    // 用户注册
    Integer register(User user,String salt) throws SQLException;

    // 充值（往钱包）
    void recharge(String userNumber, String accountNumber, double amount) throws SQLException;

    // 提现（往普通银行卡）
    void cashOut(String userNumber, String accountNumber, double amount) throws SQLException;

    // 收钱
    void collectMoney(String userNumber, String targetUserNumber, double amount) throws SQLException;

    // 前端修改用户的信息
    void updateAllInfo(User user) throws SQLException;

    // 用户忘记登录密码，通过手机号重置登录密码
    void forgotPassword(String phone,String loginPassword) throws SQLException;

    // 通过手机号查找id
    Integer queryUserIdByPhone(String phone) throws SQLException;

    // 查询手机号是否注册
    User findUserByPhone(String phone) throws SQLException;

    //二维码修改
    void uploadCodePath(String codePath, int userId) throws SQLException;

}
